/* CoralCube | Massively Multiplayer Online Role-Playing Game(MMORPG) Emulator.
|* 
|* Copyright (C) 2005-2010 MaNGOS <http://getmangos.com/>
|*               2008-2010 TrinityCore <http://www.trinitycore.org/>
|*               2008-2010 CoralCube <http://www.CoralCube.com/>
|*
|* This program is free software. You can redistribute it and/or modify it under the terms of 
|* the GNU General Public License as published by the Free Software Foundation, either 
|* version 2 of the License.
|*
|* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY, 
|* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
|* See the GNU General Public License for more details.
|*
|* You should have received a copy of the GNU General Public License along with this program. 
|* If not, see <http://www.gnu.org/licenses/>.
|*/

#ifndef CORE_DEFINE_H
#define CORE_DEFINE_H

#include <sys/types.h>

#include <ace/Basic_Types.h>
#include <ace/ACE_export.h>

#include "CompilerDefs.h"

#define CORE_LITTLEENDIAN 0
#define CORE_BIGENDIAN    1

#if !defined(CORE_ENDIAN)
#if defined (ACE_BIG_ENDIAN)
#define CORE_ENDIAN CORE_BIGENDIAN
#else //ACE_BYTE_ORDER != ACE_BIG_ENDIAN
#define CORE_ENDIAN CORE_LITTLEENDIAN
#endif //ACE_BYTE_ORDER
#endif //CORE_ENDIAN

#if PLATFORM == PLATFORM_WINDOWS
#define CORE_PATH_MAX MAX_PATH
#ifndef DECLSPEC_NORETURN
#define DECLSPEC_NORETURN __declspec(noreturn)
#endif //DECLSPEC_NORETURN
#else //PLATFORM != PLATFORM_WINDOWS
#define CORE_PATH_MAX PATH_MAX
#define DECLSPEC_NORETURN
#endif //PLATFORM

#if !defined(DEBUG)
#define CORE_INLINE inline
#else //DEBUG
#if !defined(CORE_DEBUG)
#define CORE_DEBUG
#endif //CORE_DEBUG
#define CORE_INLINE
#endif //!DEBUG

#if COMPILER == COMPILER_GNU
#define ATTR_NORETURN __attribute__((noreturn))
#define ATTR_PRINTF(F,V) __attribute__ ((format (printf, F, V)))
#else //COMPILER != COMPILER_GNU
#define ATTR_NORETURN
#define ATTR_PRINTF(F,V)
#endif //COMPILER == COMPILER_GNU

typedef ACE_INT64 int64;
typedef ACE_INT32 int32;
typedef ACE_INT16 int16;
typedef ACE_INT8 int8;
typedef ACE_UINT64 uint64;
typedef ACE_UINT32 uint32;
typedef ACE_UINT16 uint16;
typedef ACE_UINT8 uint8;

#endif //CORE_DEFINE_H
